package com.phoxell.weekly;

import com.phoxell.Agent;
import com.phoxell.DataImg;
import com.phoxell.PageFrame;
import com.phoxell.PageServlet;
import com.phoxell.Serial;
import java.io.BufferedReader;
import javax.servlet.http.HttpServletRequest;

@SuppressWarnings({"serial"})
public class WeeklyServlet extends PageServlet{
	public void doGet(HttpServletRequest req,PageFrame page)throws Exception{
		String p=req.getPathInfo();
		if(p!=null){
			p=p.substring(1);
			if(p.length()>0){
				int t=PageFrame.getParamInt(req,"t");
				Serial a=new Serial(p);
				a.update(false);
				DataImg i=new DataImg(p);
				i.setOffset(t);
				short v=a.getFirmware();
				page.aside="<h4>序列号</h4>"+(p.length()<32?p:a.getFormat())+
						"<h4>固件版本</h4>"+String.format("%x.%02x",v>>8,v&0xff)+
						"<br><br><br><h4>同步器</h4>"+a.getAgent();
				page.print("<div style=float:left;width:8ex class=z2 t=");
				page.print(i.getTime()/1000);
				page.print(">&nbsp;</div>");
				if(i.check(t+1)){
					page.print("<a href=/kalkr/");
					page.print(p);
					page.print("?t=");
					page.print(t+1);
					page.print(">◄◄</a>");
				}else page.print("<span class=gray>◄◄</span>");
				if(i.check(t-1)){
					page.print(" <a href=/kalkr/");
					page.print(p);
					page.print("?t=");
					page.print(t-1);
					page.print(">►►</a>");
				}else page.print(" <span class=gray>►►</span>");
				page.print("<br><br><br>");
				int s=i.outGraf(page);
				page.title="Weekly";
				if(a.getFlags()!=0){
					page.print("<br><br><h4>推算步行距离</h4>");
					page.print(s*a.getStepping()/1000000);
					page.print(" m<h4>推算消耗热量</h4>");
					page.print(s*a.getCal()/1000000);
					page.print(" kcal");
				}
			}
		}
	}
	public void doPut(HttpServletRequest req,PageFrame page)throws Exception{
		Agent a=new Agent(req.getHeader("User-Agent"));
		BufferedReader r=req.getReader();
		Serial s=null;
		int i=0,m=0,n;
		while((n=r.read())!=-1){
			m+=n<<i;
			i=(i+8)&0x1f;
			if(i==0){
				short k=(short)m;
				if(k>=0){
					if(s==null){
						s=new Serial(a.serial);
						s.setAgent(a);
					}
					s.setValue(k,(short)(m>>16));
				}else{
					DataImg d=new DataImg(a.serial);
					d.setImage(m,r);
					d.update();
					break;
				}
				m=0;
			}
		}
		if(s!=null)
			s.update(true);
	}
}

//private static final int FDAY=3600*24;
//private static final int HOUR=3600;
//private static final int TENM=600;

/*private void day(byte[] bits,int idx,PageFrame page){
	page.print("<div class=canv><div class=grd1></div>"+
			"<div class=grd2></div><div class=grdh></div>");
	idx<<=2;
	int k=(bits[idx]&0xff)+((bits[idx+1]<<8)&0xff00);
	idx+=4;
	int i=(bits[idx]&0xff)+((bits[idx+1]<<8)&0xff00);//,o=n;
	int f=0,v=0;
	int b=0,c=0,t=0,r=0,s=0,x=1;
	boolean z=false;
	while(i<k){
		v|=(bits[i++]&0xff)<<f;
		if(f==24){
			if(z){
				if(b==0){
					b=v-v%FDAY;
					c=b;
				}
				t=v;
				z=false;
				//page.print(String.format("%05d: %03d - %08X<br>",t-d,s,x));
				//page.print(String.format("%05d: %03d<br>",t-b,s));
			}else{
				r=v&0xffff;
				s+=v>>16;
				if(r==0)
					z=true;
				else{
					t+=r;
					//page.print(String.format("%05d: %03d<br>",t-b,s));
				}
			}
			if(t>c){
				while(t>c){
					//int d=c-b;//,h=d/HOUR,m=(d%HOUR)/60;
					if(s!=0){
						page.print("<img src=/media/blank.gif style=left:");
						page.print(x);
						page.print("px;height:");
						page.print((s=s/15)==0?1:s);
						page.print("%>");
					}
					//page.print(String.format("%02d:%02d ",h,m));
					//page.printNz(s);
					//page.print("<br>");
					c+=TENM;
					s=0;
					x+=3;
				}
			}
			v=0;
		}
		f=(f+8)&0x1f;
	}
	page.print("<div class=gs02>1k</div><div class=gs01>500</div>"+
			"</div><div class=gfoo><div class=gt00>0</div>"+
			"<div class=gt06>6</div><div class=gt12>12</div>"+
			"<div class=gt18>18</div><div class=gt24>24</div></div>");
	h=0;
	x=0;
	n=o;
	while(n<m){
		page.print(String.format("%02X ",bits[n]));
		x|=(bits[n++]&0xff)<<h;
		if(h==24){
			page.print(String.format("- %04X: %08X<br>",n,x));
			x=0;
		}
		h=(h+8)&0x1f;
	}
	page.print("<br>");
	m=bits.length;
	n=0;
	while(n<m){
		if((n&3)==0)
			page.print(String.format("<br>%08x: ",n));
		page.print(String.format("%02x ",bits[n++]));
	}
}*/
/*
private void graf(PageFrame page){
	page.print("<div class=graf>");
	page.print("<div class=gbar style=left:0;height:10%></div>");
	page.print("<div class=gbar style=left:3px;height:20%></div>");
	page.print("<div class=gbar style=left:6px;height:20%></div>");
	page.print("</div>");
	page.print("<div class=gfoo>");
	page.print("</div>");
}*/
